home *** CD-ROM | disk | FTP | other *** search
/ Zoom 2 / Zoom - Release 2 (1996)(Active Software)[!].iso / programming / amiga / visualarts / source / asl / asl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-02  |  5.3 KB  |  232 lines

  1. /* ******************************************************************** */
  2. /* C code generated by:                            */
  3. /* Visual Arts Version 2.1                        */
  4. /* Copyright 1994-95 Danny Y. Wong  All rights reserved            */
  5. /* Calgary, Alberta (CANADA)                                    */
  6. /* Partial of the code is copyright by Jaba Development            */
  7. /* ******************************************************************** */
  8.  
  9. #include <VisualArts.h>
  10. #include <clib/VisualArts_protos.h>
  11.  
  12. #define ID_scrmode                                    0
  13. #define ID_request                                    1
  14. #define ID_font                                       2
  15. #define ID_file                                       3
  16.  
  17. #define ASLNumGads                        4
  18.  
  19. #include "ASL_func.c" 
  20.  
  21. int scrmodeObj(struct VAobject VAObject);
  22. int requestObj(struct VAobject VAObject);
  23. int fontObj(struct VAobject VAObject);
  24. int fileObj(struct VAobject VAObject);
  25.  
  26. int GetPubScreen(void);
  27. void ClosePubScreen(void);
  28. int OpenASLWindow(char windtitle[]);
  29. void CloseASLWindow(void);
  30. int ASLHandler(void);
  31. int ASLMainHandler(void);
  32. void DrawASLObjs(void);
  33. int main(int argc, char *argv[]);
  34.  
  35. UBYTE                *PubScrName = "Workbench";
  36. struct DrawInfo            *ScrDrawInfo = NULL;
  37. APTR                 VisualInfo = NULL;
  38. struct Screen            *Scr = NULL;
  39. struct Window            *ASLWnd = NULL;
  40. struct Gadget            *ASLGList = NULL;
  41. struct Gadget            *ASLGadgets[ASLNumGads];
  42. struct IntuiMessage         ASLMsg;
  43. UWORD                 ASLLeft = 182;
  44. UWORD                 ASLTop = 80;
  45. UWORD                 ASLWidth = 202;
  46. UWORD                 ASLHeight = 51;
  47. struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
  48. struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };
  49.  
  50. WORD ASLGadTypes[] = {
  51.     BUTTON_KIND,
  52.     BUTTON_KIND,
  53.     BUTTON_KIND,
  54.     BUTTON_KIND,
  55. };
  56.  
  57. struct NewGadget ASLNGads[] = {
  58.     3, 1, 83, 12, (UBYTE *)"Screen",&topaz800, ID_scrmode, PLACETEXT_IN, NULL, (APTR)scrmodeObj,
  59.     99, 20, 83, 12, (UBYTE *)"Requester",&topaz800, ID_request, PLACETEXT_IN, NULL, (APTR)requestObj,
  60.     3, 20, 83, 12, (UBYTE *)"Font",&topaz800, ID_font, PLACETEXT_IN, NULL, (APTR)fontObj,
  61.     99, 1, 83, 12, (UBYTE *)"File",&topaz800, ID_file, PLACETEXT_IN, NULL, (APTR)fileObj,
  62. };
  63.  
  64. ULONG ASLNTags[] = {
  65.     TAG_DONE,
  66.     TAG_DONE,
  67.     TAG_DONE,
  68.     TAG_DONE,
  69. };
  70.  
  71.  
  72. int GetPubScreen(void)
  73. {
  74.   if (!(Scr = LockPubScreen(PubScrName)))
  75.     return(1L);
  76.  
  77.   if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  78.     return(2L);
  79.  
  80.   if (!(ScrDrawInfo = GetScreenDrawInfo(Scr)))
  81.     return(3L);
  82.   return(0L);
  83. }
  84.  
  85. void ClosePubScreen(void)
  86. {
  87.   if (VisualInfo)
  88.     FreeVisualInfo(VisualInfo);
  89.   if (Scr)
  90.     UnlockPubScreen(NULL,  Scr);
  91.   if (ScrDrawInfo)
  92.     FreeScreenDrawInfo(Scr,  ScrDrawInfo);
  93. }
  94.  
  95. int OpenASLWindow(char windtitle[80])
  96. {
  97.   struct NewGadget    NewGad;
  98.   struct Gadget       *Gad;
  99.   register UWORD i, j;
  100.   UWORD offsetx = Scr->WBorLeft;
  101.   UWORD offsety = Scr->WBorTop + Scr->Font->ta_YSize + 1;
  102.  
  103.   if (!(Gad = CreateContext(&ASLGList)))
  104.       return(1L);
  105.  
  106.   for (i=0, j=0; i < ASLNumGads; i++)
  107.   {
  108.     CopyMem((char *)&ASLNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));
  109.  
  110.     NewGad.ng_VisualInfo = VisualInfo;
  111.     NewGad.ng_LeftEdge += offsetx;
  112.     NewGad.ng_TopEdge  += offsety;
  113.  
  114.     ASLGadgets[i] = Gad = CreateGadgetA((ULONG)ASLGadTypes[i], Gad, &NewGad,
  115.     (struct TagItem *)&ASLNTags[j]);
  116.     while (ASLNTags[j])
  117.         j +=2;
  118.     j++;
  119.     if (!Gad)
  120.        return(2L);
  121.   }
  122.   if (!(ASLWnd = OpenWindowTags(NULL,
  123.       WA_Left,    ASLLeft,
  124.       WA_Top,     ASLTop,
  125.       WA_Width,    ASLWidth,
  126.       WA_Height,    ASLHeight + kWindowOffSetY,
  127.       WA_NewLookMenus, TRUE,
  128.       WA_IDCMP,    IDCMP_CLOSEWINDOW |  IDCMP_NEWSIZE | IDCMP_GADGETUP ,
  129.       WA_Flags,    WFLG_CLOSEGADGET | WFLG_DEPTHGADGET  |  WFLG_SMART_REFRESH | 
  130.              WFLG_RMBTRAP |  WFLG_ACTIVATE | 
  131.              WFLG_DRAGBAR ,
  132.       WA_Gadgets,    ASLGList,
  133.       WA_Title,    windtitle,
  134.       WA_ScreenTitle,    "Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.",
  135.       WA_PubScreen,    Scr,
  136.       WA_MinWidth,    160,
  137.       WA_MinHeight,    50,
  138.       WA_MaxWidth,    640,
  139.       WA_MaxHeight,    200,
  140.       TAG_DONE)))
  141.           return(3L);
  142.  
  143.   GT_RefreshWindow(ASLWnd, NULL);
  144.   RefreshGadgets(ASLGadgets[0], ASLWnd, NULL);
  145.   return(0L);
  146. }
  147.  
  148. void CloseASLWindow(void)
  149. {
  150.   if (ASLWnd)
  151.     CloseWindow(ASLWnd);
  152.   if (ASLGList)
  153.     FreeGadgets(ASLGList);
  154. }
  155.  
  156. int ASLHandler(void)
  157. {
  158.   struct IntuiMessage    *msg;
  159.   struct VAobject    VAObject;
  160.   int running    = 1;
  161.   int (*func)(struct VAobject VAObject);
  162.   ULONG class;
  163.   UWORD code;
  164.  
  165.   while (msg=GT_GetIMsg(ASLWnd->UserPort))
  166.   {
  167.     CopyMem((char *)msg, (char *)&ASLMsg, (long)sizeof(struct IntuiMessage));
  168.     class = msg->Class;
  169.     code  = msg->Code;
  170.  
  171.     VAObject.va_Window = (struct Window *)ASLWnd;
  172.     VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
  173.     VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  174.     VAObject.va_Flags = 0;
  175.     VAObject.va_UserData = 0;
  176.  
  177.     GT_ReplyIMsg(msg);
  178.     switch(class)
  179.     {
  180.  
  181.       case IDCMP_NEWSIZE:
  182.        break;
  183.  
  184.       case IDCMP_CLOSEWINDOW:
  185.          return(0);
  186.          break;
  187.  
  188.       case IDCMP_GADGETUP:
  189.         func = (void *)((struct Gadget *)ASLMsg.IAddress)->UserData;
  190.         if (func != NULL)
  191.           running =  func(VAObject);
  192.         break;
  193.  
  194.     }
  195.   }
  196.   return(running);
  197. }
  198.  
  199. int ASLMainHandler(void)
  200. {
  201.   int running = 1;
  202.   ULONG windsig, signals;
  203.  
  204.   windsig = 1L << ASLWnd->UserPort->mp_SigBit;
  205.  
  206.   while (running == 1)
  207.   {
  208.     signals = Wait( windsig );
  209.     if (signals & windsig)
  210.     {
  211.       running = ASLHandler();
  212.     }
  213.   }
  214.   return(running);
  215. }
  216.  
  217. int main(int argc, char *argv[])
  218. {
  219.   int rc;
  220.  
  221.   if (!(GetPubScreen()))
  222.   {
  223.     if (!(OpenASLWindow("ASL Demo")))
  224.     {
  225.       rc = ASLMainHandler();
  226.       CloseASLWindow();
  227.     }
  228.     ClosePubScreen();
  229.   }
  230.   return(0L);
  231. }
  232.